//////////////////////////////////////////////////////////////////////////
//             Copyright 2013 TYPROTECH All Rights Reserved             //
//////////////////////////////////////////////////////////////////////////
/* =======================================================================
 * 系统名   : 安防平台管理系统
 * 子系统名 : 基础数据模块
 * Class名  : CodeCategorySpecs
 * 概要     : 基础数据类型Specification类
 * 改版履历 : 
 * 版本     		日期        	作者名             备注
 * 1.0.0    2013.03.29  许智翔          初次作成
 * =======================================================================
 */
package com.framework.web.sys.repository.specifications;

import com.framework.core.util.LikePatternUtil;
import com.framework.core.util.StringUtil;
import com.framework.web.sys.domain.CodeCategory;
import org.springframework.data.jpa.domain.Specification;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;


/**
 * 数据字典分页查询条件
 */
public class CodeCategorySpecs {
    /**
     * 根据条件对基础数据类型列表进行查询分页操作
     *
     * @param codeCategory
     * @return
     */
    public static Specification<CodeCategory> LikeCodeCategoryName(
            final CodeCategory codeCategory) {

        return new Specification<CodeCategory>() {
            @Override
            public Predicate toPredicate(Root<CodeCategory> root,
                                         CriteriaQuery<?> query, CriteriaBuilder builder) {
                // add for not null
                Predicate predicate = builder.and();
                // like categoryCode
                if (StringUtil.isNotEmpty(codeCategory.getCategoryCode())) {
                    predicate = builder.and(predicate, builder.like(
                            builder.lower(root.<String>get("categoryCode")),
                            LikePatternUtil.getLikePattern(codeCategory.getCategoryCode())));
                }

                // like categoryName
                if (StringUtil.isNotEmpty(codeCategory.getCategoryName())) {
                    predicate = builder.and(predicate, builder.like(
                            builder.lower(root.<String>get("categoryName")),
                            LikePatternUtil.getLikePattern(codeCategory.getCategoryName())));
                }
                return predicate;
            }
        };

    }

}
